package com.yunxin.core.utils.infra.support.rabbit;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * @author zero°
 * @since 2024-01-02
 */
public interface RabbitQueue {

    interface QueueEnumType {
        /**
         * 获取队列名称
         *
         * @return java.lang.String
         */
        String getQueueName();

        /**
         * 获取交换机名称
         *
         * @return java.lang.String
         */
        String getExchangeName();

        /**
         * 获取路由key
         *
         * @return java.lang.String
         */
        String getRoutingKey();

        /**
         * 获取交换机类型
         *
         * @return java.lang.String
         */
        String getExchangeType();
    }

    /**
     * 核心模块队列
     */
    enum BokeModelQueue {

        /**
         * 实例
         */
        X;

        /**
         * 统计消息队列
         */
        // 波克分发客服
        public static final String BOKE_DISTRIBUTION_QUEUE = "boke-dev-queue";//队列名
        public static final String BOKE_DISTRIBUTION_CHANGE = "boke-dev-exchange";//交换机名
        public static final String BOKE_DISTRIBUTION_ROUTINGKEY = "boke-dev-routing-key";//路由key
        public static final String BOKE_DISTRIBUTION_CHANGE_TYPE = "fanout";//交换机类型


    }

    /**
     * 核心模块队列
     */
    @Getter
    @RequiredArgsConstructor
    enum CoreModelQueueEnum implements QueueEnumType {

        /**
         * 统计消息队列
         */
        BOKE_DISTRIBUTION_QUEUE(
                BokeModelQueue.BOKE_DISTRIBUTION_QUEUE,
                BokeModelQueue.BOKE_DISTRIBUTION_CHANGE,
                BokeModelQueue.BOKE_DISTRIBUTION_ROUTINGKEY,
                BokeModelQueue.BOKE_DISTRIBUTION_CHANGE_TYPE
        );

        private final String queueName;
        private final String exchangeName;
        private final String routingKey;
        private final String exchangeType;
    }
}